import axios from "axios";
import md5 from "js-md5"



/* import { Message } from "element-ui"; */


// 创建axios，赋给变量service
// 手把手撸码前端API，地址 http://www.web-jshtml.cn/productApi


export const service = axios.create({
  baseURL: process.env.VUE_APP_SSO,  // http://192.168.0.106:8080/devApi/  == http://www.web-jshtml.cn/productapi/productapi
  timeout: 15000,   // 超时
  // 网络请求接口，假设 5000
  // 1000 2000，
});
/**
 * 请求接口前，做一些数据处理（请求拦截器）
 */
service.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 后台需要前端这边传相关的参数（在请求头添加参数）
  // Tokey
  // userId
  // sui
  // 业务需求
  // 最终目地不是在请求头添加参数

  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});


/**
 * 请求接口后，返回数据进行拦截（响应拦截器）
 */
service.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  let data = response.data
  // 业务需求

   
     return Promise.resolve(data);
 

}, function (error) {
  // 对响应错误做点什么
  return Promise.reject(error);
});

/* 加密传输参数封装  */
/* const encryptionParams=(data={})=>{
  const salt = "publicSchool_V1.0"
 let md5listarr=[]
  const PUBLIC_SIGN = {
    platform: "Web",
    signType: "MD5",
    timestamp: +new Date() + "",
    version: "v1.0"
  }
  for (const key in PUBLIC_SIGN) {
   data[key]=PUBLIC_SIGN[key]
  }
  Object.keys(data).sort().forEach((item)=>{
    if (data[item]!=="") {
      md5listarr.push(`${item}=${data[item]}&`)
    }
  })
  md5listarr.push(salt)
  data[sign]=md5(md5listarr.join(''))

  return data
} */
const salt = "publicSchool_V1.0"
const PUBLIC_SIGN = {
  platform: "Web",
  signType: "MD5",
  timestamp: +new Date() + "",
  version: "v1.0"
}
// 加密传输参数通用方法封装
function encryptionParams(data = {}) {
  // console.log("加密对象 =>", data);
  // md5加密参数列表
  let md5List = [];

  // 将请求参数与公共参数合并到一个对象中
  Object.keys(PUBLIC_SIGN).forEach(item => data[item] = PUBLIC_SIGN[item])

  // 根据对象中的key进行排序[a-z] key=value&key2=value2
  // 参数value为空不进入加密
  Object.keys(data).sort().filter((item) => {
    // JS中 "" == 0 所以先判断类型
    if (data[item] == undefined || (typeof data[item] == "string" && data[item] == "") || typeof data[item] == "object") {
      // console.log(`${item} 不进入加密`);
    } else {
      md5List.push(`${item}=${data[item]}&`)
    }
  })

  // 加盐
  md5List.push(salt);

  // console.log("加密参数", md5List.join(""));

  // 加上签名参数进行请求
  data["sign"] = md5(md5List.join(""));

  // 返回处理后的对象数据
  return data;
}

// 几种通用请求方式封装 GET、POST、PUT、DELETE

// GET请求
export const Get = (URL, data) => service.get(URL, { params: encryptionParams(data) })
// POST请求
export const POST = (URL, data, params, config) => service.post(URL, encryptionParams(data), { params: params, ...config });
// PUT请求
export const PUT = (URL, data, params) => service.put(URL, data, { params });
// DELETE请求
export const DELETE = (URL, data, params) => service.delete(URL, { data: data, params });
